package com.wongoing.base;

import java.lang.reflect.InvocationTargetException;
import java.util.List;
import java.util.Map;


/**
 * 功能说明 ：基础业务接口
 * 修改说明
 * @author 郑立兵
 * @date 2017-03-22 上午11:47:54
 * @version V1.0
 */
public interface BaseService<T, Serializable> extends BaseDao<T, Serializable> {
	/**
	 * 功能说明：按参数排序查询
	 * 修改说明：
	 * @author 郑立兵
	 * @date 2017-3-23 下午2:23:44
	 * @param order 排序字段
	 * @param orderTurn 排序方向，asc or desc
	 * @param param 查询参数
	 * @return 返回符合要求且排好序的实体集合
	 * @throws IllegalAccessException
	 * @throws InvocationTargetException
	 * @throws NoSuchMethodException
	 */
	public List<T> getByParamAndOrder(String order, String orderTurn, Map<String, Object> param) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException;
	/**
	 * 功能说明：按参数查询前top条记录
	 * 修改说明：
	 * @author 郑立兵
	 * @date 2017-3-23 下午2:25:46
	 * @param offset 偏移量
	 * @param top 限定返回结果的记录数
	 * @param param 查询参数
	 * @return 返回符合要求的实体集合
	 * @throws IllegalAccessException
	 * @throws InvocationTargetException
	 * @throws NoSuchMethodException
	 */
	public List<T> getTopByParam(int offset, int top, Map<String, Object> param) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException;
	/**
	 * 功能说明：按参数查询前top条记录
	 * 修改说明：
	 * @author 郑立兵
	 * @date 2017-3-23 下午2:30:13
	 * @param top 限定返回结果的记录数
	 * @param param 查询参数
	 * @return 返回符合要求的实体集合
	 * @throws IllegalAccessException
	 * @throws InvocationTargetException
	 * @throws NoSuchMethodException
	 */
	public List<T> getTopByParam(int top, Map<String, Object> param) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException;
	/**
	 * 功能说明：按参数排序查询前top条记录
	 * 修改说明：
	 * @author 郑立兵
	 * @date 2017-3-23 下午2:30:56
	 * @param offset 偏移量
	 * @param top 限定返回结果的记录数
	 * @param order 排序字段
	 * @param orderTurn 排序方向，asc or desc
	 * @param param 查询参数
	 * @return 返回符合要求的实体集合
	 * @throws IllegalAccessException
	 * @throws InvocationTargetException
	 * @throws NoSuchMethodException
	 */
	public List<T> getTopByParamAndOrder(int offset, int top, String order, String orderTurn, Map<String, Object> param) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException;
	/**
	 * 功能说明：按参数排序查询前top条记录
	 * 修改说明：
	 * @author 郑立兵
	 * @date 2017-3-23 下午2:36:33
	 * @param top 限定返回结果的记录数
	 * @param order 排序字段
	 * @param orderTurn 排序方向，asc or desc
	 * @param param 查询参数
	 * @return 返回符合要求的实体集合
	 * @throws IllegalAccessException
	 * @throws InvocationTargetException
	 * @throws NoSuchMethodException
	 */
	public List<T> getTopByParamAndOrder(int top, String order, String orderTurn, Map<String, Object> param) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException;
	/**
	 * 功能说明：查询所有记录
	 * 修改说明：
	 * @author 郑立兵
	 * @date 2017-3-27 下午5:14:43
	 * @return 返回对应所有记录的实体集合
	 * @throws IllegalAccessException
	 * @throws InvocationTargetException
	 * @throws NoSuchMethodException
	 */
	public List<T> getAll() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException;
	/***
	 * 功能说明：查询所有记录并排序
	 * 修改说明：
	 * @author 郑立兵
	 * @date 2017-3-27 下午5:17:47
	 * @param order 排序字段
	 * @param orderTurn 排序方向，asc or desc
	 * @return 返回排好序的所有记录
	 * @throws IllegalAccessException
	 * @throws InvocationTargetException
	 * @throws NoSuchMethodException
	 */
	public List<T> getAllAndOrder(String order, String orderTurn) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException;
	/**
	 * 功能说明：按条件查询
	 * 修改说明：
	 * @author 郑立兵
	 * @date 2017-3-23 下午2:38:28
	 * @param where 条件字符串（不包含where关键词）
	 * @return 返回符合要求的实体集合
	 */
	public List<T> getByWhere(String where);
	/** 
	 * 功能说明：按条件排序查询
	 * 修改说明：
	 * @author 郑立兵
	 * @date 2017-3-23 下午2:41:44
	 * @param where 条件字符串（不包含where关键词）
	 * @param order 排序字段
	 * @param orderTurn 排序方向，asc or desc
	 * @return 返回符合要求的实体集合
	 */
	public List<T> getByWhereAndOrder(String where, String order, String orderTurn);
	/**
	 * 功能说明：按条件查询前top条记录
	 * 修改说明：
	 * @author 郑立兵
	 * @date 2017-3-23 下午2:43:11
	 * @param offset 偏移量
	 * @param top 限定返回结果的记录数
	 * @param where 条件字符串（不包含where关键词）
	 * @return 返回符合要求的实体集合
	 */
	public List<T> getTopByWhere(int offset, int top, String where);
	/**
	 * 功能说明：按条件查询前top条记录
	 * 修改说明：
	 * @author 郑立兵
	 * @date 2017-3-23 下午2:47:24
	 * @param top 限定返回结果的记录数
	 * @param where 条件字符串（不包含where关键词）
	 * @return 返回符合要求的实体集合
	 */
	public List<T> getTopByWhere(int top, String where);
	/**
	 * 功能说明：按条件排序查询前top条记录
	 * 修改说明：
	 * @author 郑立兵
	 * @date 2017-3-23 下午2:48:36
	 * @param offset 偏移量
	 * @param top 限定返回结果的记录数
	 * @param where 条件字符串（不包含where关键词）
	 * @param order 排序字段
	 * @param orderTurn 排序方向，asc or desc
	 * @return 返回符合要求的实体集合
	 */
	public List<T> getTopByWhereAndOrder(int offset, int top, String where, String order, String orderTurn);
	/**
	 * 功能说明：按条件排序查询前top条记录
	 * 修改说明：
	 * @author 郑立兵
	 * @date 2017-3-23 下午2:51:32
	 * @param top 限定返回结果的记录数
	 * @param where 条件字符串（不包含where关键词）
	 * @param order 排序字段
	 * @param orderTurn 排序方向，asc or desc
	 * @return 返回符合要求的实体集合
	 */
	public List<T> getTopByWhereAndOrder(int top, String where, String order, String orderTurn);
}
